let express = require("express");
let https = require("https");
let axios = require("axios");
let qs = require("querystring");
let ApiSpeechClient = require("baidu-aip-sdk").speech;
let {
    uuid
} = require("uuidv4");
let fs = require("fs");
let {
    APP_ID,
    SECRET_KEY,
    API_KEY,
    access_token
} = require("./config");

let app = express();

// 实例化语音接口对象
let client = new ApiSpeechClient(APP_ID, API_KEY, SECRET_KEY);

app.get("/", (req, res) => {
    // 实现接口的调用

    let text = `近日，NBA允许球员复赛后在球衣背后写上有关社会公正的标语和口号，然后密苏里州的共和党参议员乔什-霍利就开始作秀，向媒体发了一封公开信，强行施压NBA，球员球衣背后除了社会公正的标语，也可以印表扬他们政府的口号啊，甚至，他还呓语把脚伸到我们这边来。
         得知此事的糟老头子， 直接给这个议员发了一封简洁明了的电邮， 只有言简意骇、 直抵灵魂的两个单词： Fxxk You!
        这个花旗国名记怼政客的名场面， 真是令人大快人心， 记下来， 考试要考。
    `;
    client.text2audio(text, {
        spd: 5, //语速， 取值0 - 9， 默认为5中语速
        per: 4 //发音人选择, 0 为女声， 1 为男声，  3 为情感合成 - 度逍遥， 4 为情感合成 - 度丫丫， 默认为普通女

    }).then(
        function(result) {
            console.log(result);
            if (result.data) {
                let time = Date.now();
                let uid = uuid();
                fs.writeFileSync(`./audio/voice-${uid}.mp3`, result.data);
                res.send("ok");
            } else {
                console.log("文件写入错误");
                res.send("error");
            }
        },
        function(err) {
            console.log("err", err);
        }
    );
});

// 获取access_token=>url:https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=C3dTOGLxXNxwhpg35KiCztZy&client_secret=NaSqQs5Uu042yBhL2sIniL97xpS1WG8O
app.get("/token", (req, res) => {
    const param = qs.stringify({
        grant_type: "client_credentials",
        client_id: API_KEY,
        client_secret: SECRET_KEY,
    });

    // 更加的低层 可以使用pipe方法可以输出到控制台（process.stdout）
    // https.get({
    //         hostname: "aip.baidubce.com",
    //         path: "/oauth/2.0/token?" + param,
    //         agent: false,
    //     },
    //     function(result) {
    //         // console.log(result);
    //         result.pipe(process.stdout);
    //         result.pipe(res);
    //     }
    // );

    // 封装的更彻底 没有pipe方法
    axios
        .get(`https://aip.baidubce.com/oauth/2.0/token?${param}`)
        .then((result) => {
            // console.log(result.data);
            //
            res.send(result.data);
        })
        .catch((err) => {
            console.log(err);
        });
});

app.listen(3002, function() {
    console.log(`http://localhost:3002`);
});